package cn.tedu.justone.pack02;

/**
 * ZZ：JustOne
 * VX：Andylau2020smile
 * DY：JustOne2018
 * ZT：《》
 */
public class Demo17_方法示例_interrupted获取并清除中断标记 {

    //boolean b = Thread.interrupted()获取并清除中断标记
    //boolean b = Thread.interrupted()获取并清除中断标记
    //boolean b = Thread.interrupted()获取并清除中断标记
    //
    //注意事项：
    // 1,可以写成 t.interrupted();也可以直接写 interrupted();效果一样，
    //   都是获取并清除执行该代码的线程的清除标记。
    // 2,对比：t.isInterrupted();是获取t线程是否被标记了中断，
    //   interrupted();是获取它所在的线程的中断标记 并清除该标记。
    // 3,易错：t.interrupted();针对的是运行该代码的线程，并不是针对t线程。

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(){
            @Override
            public void run() {
                for (int i = 0; i < 500000 * 20; i++) {
                    if(i%500000==0){
                        //System.out.println("---努力搬砖中");
                        System.out.println("(内1)本线程是否被标记中断："+ isInterrupted());
                    }
                }
                System.out.println("---砖搬完了");
                System.out.println("(内2)本线程是否被标记中断："+ this.interrupted());
                System.out.println("(内3)本线程是否被标记中断："+ this.interrupted());
                try {
                    Thread.sleep(1000);
                    System.out.println("---sleep结束了");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        };
        t1.start();

        Thread.sleep(10);

        System.out.println("(1)t1是否被标记中断："+ t1.isInterrupted());
        t1.interrupt();//中断
        System.out.println("(2)t1是否被标记中断："+ t1.isInterrupted());

        //这里无论是写t1.interrupted();还是写Thread.interrupted();
        //都是检测运行本句代码的线程
        //boolean b =  t1.interrupted();
        //System.out.println("(3)main是否被标记中断："+b);

        Thread.sleep(2000);
        System.out.println("(5)t1是否被标记中断："+ t1.isInterrupted());
    }
}
